table of contents
UNLINK(2) | Руководство программиста Linux | UNLINK(2) |
ИМЯ¶
unlink - удаляет имя и, возможно файл, на который оно ссылается
ОБЗОР¶
#include <unistd.h>
int unlink(const char *pathname);
ОПИСАНИЕ¶
unlink() удаляет имя из файловой системы. Если это имя было последней ссылкой на файл и больше нет процессов, которые держат этот файл открытым, данный файл удаляется и место, которое он занимает, освобождается для дальнейшего использования.
Если имя было последней ссылкой на файл, но какие-либо процессы всё ещё держат этот файл открытым, файл будет оставлен, пока последний файловый дескриптор, указывающий на него, не будет закрыт.
Если имя указывает на символьную ссылку, ссылка будет удалена.
Если имя указывает на сокет, fifo или устройство, то имя будет удалено, но процессы, которые открыли любой из этих объектов могут продолжать его использовать.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
- EACCES
- Для эффективного UID процесса нет прав на запись в каталог, содержащийся в pathname, или в одном из каталогов в pathname не разрешён поиск (смотрите также path_resolution(7)).
- EBUSY
- Файл pathname не может быть удалён, так как он ещё используется системой или другим процессом; например, это точка монтирования или его создал клиент NFS для представления активной, но пока безымянной inode («NFS silly renamed»).
- EFAULT
- Аргумент pathname указывает за пределы доступного адресного пространства.
- EIO
- Произошла ошибка ввода-вывода.
- EISDIR
- pathname ссылается на каталог. (Этого значения нет в POSIX, возвращается в Linux начиная с 2.1.132.)
- ELOOP
- Во время определения pathname встретилось слишком много символьных ссылок.
- ENAMETOOLONG
- pathname слишком длинен.
- ENOENT
- Компонент pathname не существует, является повисшей ссылкой или pathname пуст.
- ENOMEM
- Недостаточное количество памяти ядра.
- ENOTDIR
- Компонент пути, использованный как каталог в pathname, в действительности таковым не является.
- EPERM
- Система не разрешает удаление каталогов или для удаления каталогов требуются права, которыми не обладает вызвавший процесс. (Этот код ошибки предусмотрен в POSIX; как описано выше, в Linux в этом случае возвращается EISDIR.)
- EPERM (только в Linux)
- Файловая система не позволяет удаление файлов.
- EPERM или EACCES
- На каталоге, содержащемся в pathname, установлен закрепляющий бит (S_ISVTX) и эффективный UID процесса не совпадает ни с UID удаляемого файла, ни с каталогом, в котором он содержится, и у процесса нет прав (Linux: нет мандата CAP_FOWNER).
- EROFS
- pathname находится на файловой системе, доступной только для чтения.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
SVr4, 4.3BSD, POSIX.1-2001.
ДЕФЕКТЫ¶
Неточности в протоколе NFS могут приводить к неожиданному исчезновению файлов, которые всё ещё используются.
СМОТРИТЕ ТАКЖЕ¶
rm(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), unlinkat(2), mkfifo(3), remove(3), path_resolution(7), symlink(7)
2011-09-15 | Linux |